<html>
	<head>
		<title>imperative</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
		<meta name="viewport" content="width=device-width initial-scale=1">
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<meta http-equiv="Content-Language" content="en-gb">

<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
		
	</head>
	<body class="commentary-font">
		<nav role="navigation">
		<h1><a href="../index.html"><img src="../docs-assets/Inform.png" height=72> </a></h1>
<ul><li><a href="../index.html">home</a></li>
</ul><h2>Compiler</h2><ul>
<li><a href="../structure.html">structure</a></li>
<li><a href="../inbuildn.html">inbuild</a></li>
<li><a href="../inform7n.html">inform7</a></li>
<li><a href="../intern.html">inter</a></li>
<li><a href="../services.html">services</a></li>
<li><a href="../secrets.html">secrets</a></li>
</ul><h2>Other Tools</h2><ul>
<li><a href="../inblorbn.html">inblorb</a></li>
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=0> github</a></li>
</ul><h2>Related Projects</h2><ul>
<li><a href="https://github.com/ganelson/inweb"><img src="../docs-assets/github.png" height=0> inweb</a></li>
<li><a href="https://github.com/ganelson/intest"><img src="../docs-assets/github.png" height=0> intest</a></li>
</ul>
		</nav>
		<main role="main">
		<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><b>imperative</b></li></ul>
		<p class="purpose">Compiling imperative code inside phrase or rule definitions. This is version 1.</p>
		<hr>
		<div class="contentspage">
			<ul class="chapterlist">
				<li>
					<p class="chapterentry"><a name="P"></a>
						<span class="chaptertitle">Preliminaries</span></p>
					<ul class="sectionlist">
						<li>
							<p class="sectionentry"><a href="P-wtmd.html">
								<spon class="sectiontitle">What This Module Does</span></a> -
							<span class="sectionpurpose">An overview of the imperative module's role and abilities.</span></p>
						</li>
					</ul>
				</li>
				<li>
					<p class="chapterentry"><a name="1"></a>
						<span class="chaptertitle">Chapter 1: Configuration and Control</span></p>
					<ul class="sectionlist">
						<li>
							<p class="sectionentry"><a href="1-im.html">
								<spon class="sectiontitle">Imperative Module</span></a> -
							<span class="sectionpurpose">Setting up the use of this module.</span></p>
						</li>
					</ul>
				</li>
				<li>
					<p class="chapterentry"><a name="2"></a>
						<span class="chaptertitle">Chapter 2: Values</span></p>
					<p class="chapterpurpose">Compiling rvalues, lvalues and conditions.</p>
					<ul class="sectionlist">
						<li>
							<p class="sectionentry"><a href="2-cv.html">
								<spon class="sectiontitle">Compile Values</span></a> -
							<span class="sectionpurpose">To compile specifications of values into Inter value opcodes or array entries.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="2-cr.html">
								<spon class="sectiontitle">Compile Rvalues</span></a> -
							<span class="sectionpurpose">To compile rvalues into Inter value opcodes or array entries.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="2-cl.html">
								<spon class="sectiontitle">Compile Lvalues</span></a> -
							<span class="sectionpurpose">To compile storage references into Inter value opcodes.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="2-cc.html">
								<spon class="sectiontitle">Compile Conditions</span></a> -
							<span class="sectionpurpose">To compile Inter code to test a condition.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="2-map.html">
								<spon class="sectiontitle">Matching Action Patterns</span></a> -
							<span class="sectionpurpose">Testing whether the current action matches an action pattern means compiling a complicated multi-clause condition, which is what this section does.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="2-mgap.html">
								<spon class="sectiontitle">Matching Going Action Patterns</span></a> -
							<span class="sectionpurpose">Tweaks to compiling APs for the going action.</span></p>
						</li>
					</ul>
				</li>
				<li>
					<p class="chapterentry"><a name="3"></a>
						<span class="chaptertitle">Chapter 3: Functions</span></p>
					<p class="chapterpurpose">Managing the compilation of Inter functions.</p>
					<ul class="sectionlist">
						<li>
							<p class="sectionentry"><a href="3-sf.html">
								<spon class="sectiontitle">Stack Frames</span></a> -
							<span class="sectionpurpose">When Inform compiles imperative code, it does so in the context of a "stack frame".</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="3-lvs.html">
								<spon class="sectiontitle">Local Variable Slates</span></a> -
							<span class="sectionpurpose">The collection of Inter locals belonging to a stack frame.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="3-lv.html">
								<spon class="sectiontitle">Local Variables</span></a> -
							<span class="sectionpurpose">Local variables are used for call parameters, temporary values, and other ephemeral workspace.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="3-tv.html">
								<spon class="sectiontitle">Temporary Variables</span></a> -
							<span class="sectionpurpose">When the runtime code needs to borrow a global variable for a while.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="3-lp.html">
								<spon class="sectiontitle">Local Parking</span></a> -
							<span class="sectionpurpose">Like Free Parking in Monopoly, except that it is not free and has an overhead cost.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="3-cb.html">
								<spon class="sectiontitle">Code Blocks</span></a> -
							<span class="sectionpurpose">Blocks of code are used to give conditionals and loops greater scope, as in more traditional programming languages.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="3-fnc.html">
								<spon class="sectiontitle">Functions</span></a> -
							<span class="sectionpurpose">To compile Inter functions.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="3-jl.html">
								<spon class="sectiontitle">Jump Labels</span></a> -
							<span class="sectionpurpose">Generating numbered families of identifier names to use as jump labels, and creating any associated array storage needed.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="3-pr.html">
								<spon class="sectiontitle">Phrase Requests</span></a> -
							<span class="sectionpurpose">To store and later fill requests to compile To... phrases.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="3-cls.html">
								<spon class="sectiontitle">Closures</span></a> -
							<span class="sectionpurpose">To provide the names of phrases as first-class values.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="3-cid.html">
								<spon class="sectiontitle">Compile Imperative Definitions</span></a> -
							<span class="sectionpurpose">Compiling an Inter function from the body of an imperative definition.</span></p>
						</li>
					</ul>
				</li>
				<li>
					<p class="chapterentry"><a name="4"></a>
						<span class="chaptertitle">Chapter 4: Propositions</span></p>
					<p class="chapterpurpose">Generating code to test or assert propositions from predicate calculus.</p>
					<ul class="sectionlist">
						<li>
							<p class="sectionentry"><a href="4-cs.html">
								<spon class="sectiontitle">Compile Schemas</span></a> -
							<span class="sectionpurpose">Here we compile fragments of code from paraphrases written in Inform 6 notation, and use that ability to compile general predicate calculus terms.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="4-ca.html">
								<spon class="sectiontitle">Compile Atoms</span></a> -
							<span class="sectionpurpose">Given an atom of a proposition we compile Inter code to test it, to make it henceforth true, or to make it henceforth false.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="4-cp.html">
								<spon class="sectiontitle">Compile Propositions</span></a> -
							<span class="sectionpurpose">To compile a proposition within the body of the current function.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="4-cl.html">
								<spon class="sectiontitle">Compile Loops</span></a> -
							<span class="sectionpurpose">To compile loop headers from a range of values expressed by a proposition.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="4-dtd.html">
								<spon class="sectiontitle">Deciding to Defer</span></a> -
							<span class="sectionpurpose">To decide whether a proposition can be compiled immediately, in the body of the current function, or whether it must be deferred to a function of its own, which is merely called from the current function.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="4-cad.html">
								<spon class="sectiontitle">Cinders and Deferrals</span></a> -
							<span class="sectionpurpose">Cinders are constants in deferred propositions referring to values in the original stack frame.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="4-cdp.html">
								<spon class="sectiontitle">Compile Deferred Propositions</span></a> -
							<span class="sectionpurpose">To compile the Inter functions needed to perform the tests or tasks deferred as being too difficult in their original contexts.</span></p>
						</li>
					</ul>
				</li>
				<li>
					<p class="chapterentry"><a name="5"></a>
						<span class="chaptertitle">Chapter 5: Invocations</span></p>
					<p class="chapterpurpose">Generating code to perform invocations of individual phrases.</p>
					<ul class="sectionlist">
						<li>
							<p class="sectionentry"><a href="5-cbal.html">
								<spon class="sectiontitle">Compile Blocks and Lines</span></a> -
							<span class="sectionpurpose">Compiling a code block of lines from an imperative definition.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="5-ci.html">
								<spon class="sectiontitle">Compile Invocations</span></a> -
							<span class="sectionpurpose">Generating code to perform an invocation.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="5-ciac.html">
								<spon class="sectiontitle">Compile Invocations As Calls</span></a> -
							<span class="sectionpurpose">An invocation defined with Inform 7 source text is made with an Inter function call.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="5-cii.html">
								<spon class="sectiontitle">Compile Invocations Inline</span></a> -
							<span class="sectionpurpose">Here we generate Inter code to invoke a phrase from its inline definition.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="5-cste.html">
								<spon class="sectiontitle">Compile Solutions to Equations</span></a> -
							<span class="sectionpurpose">To compile code to solve an equation involving numerical quantities.</span></p>
						</li>
						<li>
							<p class="sectionentry"><a href="5-ca.html">
								<spon class="sectiontitle">Compile Arithmetic</span></a> -
							<span class="sectionpurpose">To compile code performing an arithmetic operation.</span></p>
						</li>
					</ul>
				</li>
			</ul>
		</div>
		<hr>
		<p class="purpose">Powered by <a href="https://github.com/ganelson/inweb">Inweb</a>.</p>
		</main>
	</body>
</html>

